package com.example.parent.bookmanage_security.controller;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 登录相关控制器
 * 处理与用户登录状态相关的请求，如获取当前登录用户名等
 */
@RestController // 标识为REST风格控制器，方法返回值直接作为响应体（而非视图）
public class LoginController {

    /**
     * 获取当前登录用户名的接口
     * 通过Spring Security的上下文获取当前认证用户信息
     *
     * @return 当前登录用户名（字符串形式）
     */
    @RequestMapping(value = "/getUsername") // 映射请求路径，处理GET/POST等方式的/getUsername请求
    public String getUsername() {
        // 从Security上下文（安全上下文）中获取认证信息对象
        // SecurityContextHolder是Spring Security存储认证信息的核心类
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        // 判断用户是否已认证（未认证用户可能是匿名用户）
        if (!authentication.isAuthenticated()) {
            return null; // 未认证时返回null
        }

        // 获取认证主体（即登录用户信息）
        // 对于已认证用户，principal通常是UserDetails类型的对象
        UserDetails userDetails = (UserDetails) authentication.getPrincipal();

        // 从UserDetails中获取用户名
        String username = userDetails.getUsername();

        // 控制台打印用户名（用于调试）
        System.out.println(username);

        // 返回用户名为响应结果
        return username;
    }
}